import os
import json  # 导入 json 模块，用于处理 json 文件
from flask import Flask, render_template, request, redirect, url_for, flash

basedir = os.path.abspath(os.path.dirname(__file__))

# 定义用户数据文件的路径
USER_DATA_FILE = os.path.join(basedir, 'users.json')


# ==================== 新增的函数 ====================
def load_users():
    """从 users.json 文件加载用户数据"""
    if not os.path.exists(USER_DATA_FILE):
        # 如果文件不存在，返回一个包含默认管理员的字典
        return {'admin': '123456'}
    try:
        with open(USER_DATA_FILE, 'r') as f:
            return json.load(f)
    except (IOError, json.JSONDecodeError):
        # 如果文件读取错误或格式不正确，也返回默认字典
        return {'admin': '123456'}


def save_users(users_data):
    """将用户数据保存到 users.json 文件"""
    try:
        with open(USER_DATA_FILE, 'w') as f:
            json.dump(users_data, f, indent=4)
    except IOError:
        print(f"错误：无法将用户数据写入到文件 {USER_DATA_FILE}")


# ======================================================

app = Flask(__name__,
            template_folder=os.path.join(basedir, 'templates/'),
            static_folder=os.path.join(basedir, 'static/'))
app.secret_key = 'your_very_secret_key'

# 程序启动时，不再使用固定的字典，而是从文件加载用户
users = load_users()


@app.route('/')
def home():
    """显示登录页面"""
    return render_template('login.html')


@app.route('/login', methods=['POST'])
def login():
    """处理登录请求"""
    username = request.form.get('username')
    password = request.form.get('password')
    # 使用 .get() 方法更安全，以防用户名不存在
    if users.get(username) == password:
        flash('登录成功！', 'success')
        return redirect(url_for('index'))
    else:
        flash('用户名或密码错误，请重试。', 'danger')
        return redirect(url_for('home'))


@app.route('/index')
def index():
    """主页"""
    return render_template('index.html')


@app.route('/register', methods=['GET'])
def show_register_page():
    """显示注册页面"""
    return render_template('register.html')


@app.route('/register', methods=['POST'])
def register():
    """处理注册逻辑"""
    username = request.form.get('username')
    password = request.form.get('password')

    if username in users:
        flash('该用户名已被注册，请换一个。', 'danger')
        return redirect(url_for('show_register_page'))

    if not username or not password:
        flash('用户名和密码不能为空。', 'danger')
        return redirect(url_for('show_register_page'))

    # 将新用户添加到 users 字典
    users[username] = password

    # ====> 关键改动：保存更新后的 users 字典到文件 <====
    save_users(users)

    flash('注册成功！现在您可以使用新账户登录了。', 'success')
    return redirect(url_for('home'))


if __name__ == '__main__':
    app.run(debug=True)